iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
自我挑戰組

從零打造客製化 AI 聊天機器人系列 第 10

[從零打造客製化 AI 聊天機器人] 多輪對話

  • 分享至 

  • xImage
  •  

什麼是多輪對話?
每次向大語言模型發送新消息時,不只是發送當前的問題,而是將整個歷史對話(包括之前的問題和回答)一起發送,這樣模型就可以記住先前的對話內容,根據上下文給出更連貫和相關回應。

執行步驟:

  1. 使用找輸入問題,問題和之前歷史對話,一起發給大語言模型
  2. 模型根據整個對話的上下文進行推理,生成合適答案
  3. 回應也會被加到歷史對話,隨下一次問題一起發送,形成多輪對話連貫性
from openai import AzureOpenAI
from openai_config import *

client = AzureOpenAI(
    azure_endpoint=azure_endpoint,
    api_key=api_key,
    api_version=api_version
)

# 保存使用者的聊天上下文
chat_history = [
    {"role": "system", "content": "You are a helpful assistant."}
]

# 增加輸入到對話歷史
def update_chat_history(role, content):
    chat_history.append({"role": role, "content": content})


# 聊天邏輯
def single_user_chat(user_input):
    # 將使用者的輸入加到上下文中
    update_chat_history("user", user_input.strip())

    # 呼叫 Azure OpenAI 生成回應
    response = client.chat.completions.create(
        model=model_name,  # 替換為 Azure 中的模型名稱,如 'gpt-35-turbo'
        messages=chat_history,  # 使用對話歷史
        temperature=0,  # 越高,回答越有創造性
        max_tokens=150,  # 控制回答長度
        top_p=0.95,  # 調整與控制AI模型輸出的隨機性,值越低時,模型輸出結果會更加的確定
        frequency_penalty=0,  # 調控進行推論時特定詞彙出現的頻率
        presence_penalty=0,  # 調控推論生成的內容中引入新概念或詞彙的傾向性
        stop=None
    )
    # 取得 AI 回應
    response_text = response.choices[0].message.content

    # 將 AI 回應也加入上下文
    update_chat_history("assistant", response_text)

    return response_text

while True:
    user_input = input("You:")
    
    if user_input.lower() == "exit":
        break
    
    ai_response = single_user_chat(user_input)
    print(f"AI:{ai_response}")
  • chat_history:一個全局變數,用來存儲整個對話的上下文,包括所有的問題和回應,這裡初始化了 system 訊息,表示 AI 的角色是「幫助者」。
  • update_chat_history:這個函數會根據不同的角色(使用者或 AI)將消息添加到聊天歷史中。
  • single_user_chat:每次呼叫這個函數時,會將當前的對話上下文一同傳給 Azure OpenAI API,模型根據上下文生成回應。

https://ithelp.ithome.com.tw/upload/images/20240923/20169415Wv4UTZvWO0.png
AI 的回應包含對使用者之前提到的內容回應和總結,顯示 AI 有記住之前的對話,可以增強對話連貫性和回應。


上一篇
[從零打造客製化 AI 聊天機器人] 基本的聊天功能
下一篇
[從零打造客製化 AI 聊天機器人] Prompt Engineering
系列文
從零打造客製化 AI 聊天機器人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言